package com.apexsoft.margin.account.management.persistent.repository;

import com.alibaba.excel.EasyExcel;
import com.apexsoft.margin.account.management.domain.excel.model.RecycleDomain;
import com.apexsoft.margin.account.management.domain.excel.service.TemplateExcelRepository;
import com.apexsoft.margin.account.management.persistent.listener.RecycleListener;

import com.apexsoft.margin.account.management.persistent.mapper.RecycleMapper;
import com.apexsoft.margin.account.management.util.CheckUtil;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;

/**
 * 专业锁回收 实现类
 * 1.专业锁回收 Excel文件上传（uploadExcel）：读取excel文件中的数据，直接导入数据库不做任何处理
 * 2.专业锁回收查询（getListDomainData）：根据传入的fileCode查出一批数据
 * 3.专业锁回收更新（excuteExcel）：每次对一条数据执行操作，用户存在则处理信息并更新，用户不存在不做处理并设置提示信息
 */
@Service("RecycleExcelRepositoryImpl")
public class RecycleExcelRepositoryImpl implements TemplateExcelRepository<RecycleDomain> {

    @Resource
    RecycleMapper recycleMapper;

    /**
     * 专业锁回收 文件上传接口
     * @param file
     * @param filecode
     * @throws IOException
     */
    @Override
    public void uploadExcel(MultipartFile file, String filecode) throws IOException {
        EasyExcel.read(file.getInputStream(), RecycleDomain.class,new RecycleListener(filecode,recycleMapper)).sheet().doRead();
    }

    /**
     * 专业锁回收查询接口
     * 根据 fileCode 在数据库中查询出含有这个fileCode 的一批数据
     * @param fileCode
     * @return
     */
    @Override
    public List<RecycleDomain> getListDomainData(String fileCode) {
        EntityWrapper<RecycleDomain> wrapper = new EntityWrapper<>();
        wrapper.eq("file_code",fileCode);
        return recycleMapper.selectList(wrapper);
    }

    /**
     * 每次导入一个对象，先检查该对象是否存在。
     * 1.用户不存在，设置提示信息（resultCode,resultNote,exist）,不执行导入更新数据库的操作
     * 2.用户存在，调用接口（具体处理什么内容？）获得回执信息，将处理结果填写到resultNote
     * @param domain
     * @return
     */
    @Override
    public boolean excuteExcel ( RecycleDomain domain){
        boolean result = true ;
        //TODO:判断存在与否(调提供的数据库)
        CheckUtil checkUtil  = new CheckUtil();
        if(checkUtil.checkUser(domain.getFundid())){
            // TODO:用户存在，调用微服务接口获得回执信息，设置domain和result

            domain.setExist(1);
            domain.setResultCode(1);
            domain.setResultNote("处理成功");
        }else{
            result = false ;
            // 1 true 0 false
            domain.setResultCode(0);
            domain.setExist(0);
            domain.setResultNote("未找到用户");
        }
        recycleMapper.updateById(domain);
        return result ;
    }
}
